www.gusucode.com > 粒子群算法 matlab求解源码及结果 > 粒子群算法 matlab求解源码及结果/粒子群算法 matlab求解源码及结果/粒子群算法源代码/粒子群算法源代码/SimuAPSO.m
function [xm,fv] = SimuAPSO(fitness,N,c1,c2,lamda,M,D) format long; %------初始化种群的个体------------ for i=1:N for j=1:D x(i,j)=randn; %随机初始化位置 v(i,j)=randn; %随机初始化速度 end end %------先计算各个粒子的适应度,并初始化Pi和Pg---------------------- for i=1:N p(i)=fitness(x(i,:)); y(i,:)=x(i,:); end pg = x(N,:); %Pg为全局最优 for i=1:(N-1) if fitness(x(i,:))<fitness(pg) pg=x(i,:); end end %------进入主要循环,按照公式依次迭代------------ T = - fitness(pg)/log(0.2); for t=1:M groupFit = fitness(pg); for i=1:N Tfit(i) = exp( - (p(i) - groupFit)/T); end SumTfit = sum(Tfit); Tfit = Tfit/SumTfit; pBet = rand(); for i=1:N ComFit(i) = sum(Tfit(1:i)); if pBet <= ComFit(i) pg_plus = x(i,:); break; end end C = c1 + c2; ksi = 2/abs( 2 - C - sqrt(C^2 - 4*C)); for i=1:N v(i,:)=ksi*(v(i,:)+c1*rand*(y(i,:)-x(i,:))+c2*rand*(pg_plus-x(i,:))); x(i,:)=x(i,:)+v(i,:); if fitness(x(i,:))<p(i) p(i)=fitness(x(i,:)); y(i,:)=x(i,:); end if p(i)<fitness(pg) pg=y(i,:); end end T = T * lamda; Pbest(t)=fitness(pg); end xm = pg'; fv = fitness(pg);